import java.util.Stack;

/**
 * Created with IntelliJ IDEA
 * Description:
 * User: lenovo
 * Date: 2023 -04 -15
 * Time: 10:28
 */
public class MinStack {
    //实例化两个栈
    Stack<Integer> stack;//正常操作的栈，也就是主栈
    Stack<Integer> minStack;//帮助我们获取最小值的栈，辅栈
    public MinStack() {
    stack=new Stack<>();
    minStack=new Stack<>();
    }

    public void push(int val) {
        stack.push(val);//不管是什么数据，都要压入主栈
        if(minStack.empty()){//如果最小栈为空，则填入数据
            minStack.push(val);
        }else{//如果现在的数据比最小栈的栈顶的数据要小或者相等，则要压入最小栈
            if(val<=minStack.peek()){
                minStack.push(val);
            }
        }
    }

    public void pop() {
        if(stack.empty()){
            return;
        }
        int val=stack.pop();//不管什么情况，主栈的数据是要删除的
        if(val==minStack.peek()){//主栈数据发生变化，辅栈一定也要更新数据，
            // 如果主栈删除的数据等于辅栈的栈顶数据，则辅栈也要删除栈顶元素的数据
            minStack.pop();
        }
    }

    public int top() {
    int ret=stack.peek();
    return ret;
    }
//获取元素，不是删除元素！！！
    public int getMin() {//注意：这里要写为peek()，不可以写成pop(),不然会发生空栈异常
        int min=minStack.peek();
        return min;
    }

    public static void main(String[] args) {
        MinStack minStack=new MinStack();
        minStack.push(-2);
        minStack.push(0);
        minStack.push(-1);
        System.out.println(minStack.getMin());
        System.out.println(minStack.top());
        minStack.pop();
        System.out.println(minStack.getMin());
    }
}